******************************
*
*   ROOM DRAWER 
*
********************************
*
RNDL EQU $4E
RANDOM EQU $6600 
ARRAY EQU $10
LEV EQU $8CA
REG EQU $8CE
RNUM EQU $8C9
TEMP EQU $8D4  
INDEX EQU $8ED
CONT EQU $8EE
XTAB EQU $8E7
YTAB EQU $8E8
STRNUM EQU $8EA
STRTEMP EQU $8D3
OLDKEY EQU $9C0
XH EQU $9C3
XCH EQU $8E0
YCH EQU $8E1
REGH EQU $8F0
STRPRNT EQU $5F40 ;TEMP 
SKBAS EQU $94D6 
SKNUM EQU $9D9
XR EQU $9D8
TEMP1 EQU $9D7
TEMP2 EQU $8D2
SKDR1 EQU $5A03 
FIGXR EQU $5A00
DRBXOP EQU $5A06 
DRBXCL EQU $5A09 
UPSTR EQU $5A0C 
BOTSTR EQU $5A0F 
PRINTA EQU $5A12 
PRINTB EQU $5A15 
BY EQU $94C0 
RTDOP EQU $5A18 
LFDOP EQU $5A1B 
LEFTWALL EQU $5A1E 
NOFLOOR EQU $5A2D
DRSK EQU $5A2A
COUNT2 EQU $8FF
XTEMP EQU $8C3
YTEMP EQU $8C4
TEMP3 EQU $8E6
STAT1 EQU $8D0
STAT2 EQU $8D1
SKFLG EQU $8D7
OPMODE0 EQU $E90  
FIRSTDRAW EQU $C3E 
STICKCOUNT EQU $8E5
BULLETCOUNT EQU $8D5
STAIRWELL EQU $5A21 
DRTSTR EQU $5A24
DLSTR EQU $5A27
WEAKFLOOR EQU $5A30
DRAWFLOOR EQU $5A4B
RMADJRT EQU $C59
RMADJLF EQU $C5C
WIDTH EQU $EC
XNEW EQU $EF0 
OPLEV EQU $E30 ; LEVOP IN OPMOV 
CHNEW EQU $ED0 
ROOMTAB EQU $94E0
SPEC EQU $94F0
OPWIDTH EQU $E50 
SAFLG EQU $FC8 
LIVES EQU $9ED
DIFFL EQU $9EE
CAPTUREFLG EQU $FC7 
ROW EQU $8CC
COL EQU $8CD
ACT1 EQU $9C2
YH EQU $9C4
MNSTLOAD EQU $6C06
MNSTSET EQU $5FC0
SPECIAL EQU $6800
LETFALL EQU $5212
SPECIAL1 EQU $5009
SPECIAL2 EQU $500C
SPECIAL3 EQU $500F
SPECIAL4 EQU $5012  
IDFL EQU $95F0
*
*
 ORG $5700 
*
*
ROOMDRAW JMP ROOMDRAW1
PRB JMP PRB1      
LOOKINBOX JMP LKBX1
OPENBOX JMP LKBX1
TAKEIT JMP LKBX1
INVENTORY JMP INV1
ERASEMSG JMP ERASMSG
SPRET JMP INST2
MESSAGE JMP MSG
*
*
WATEROOM EQU $9F6
SHRINKROOMA EQU $9F7
SHRINKROOMB EQU $9F8
BLOCKFLG EQU $9F9
H2O EQU $8EF
WATLEV EQU $8DB
SHRINKSFLG EQU $9FA
*
*
ROOMDRAW1 LDA #0
 STA WATEROOM
 STA SHRINKROOMA
 STA SHRINKROOMB
 STA BLOCKFLG 
 STA SHRINKSFLG
 STA H2O 
 LDA #159
 STA WATLEV 
 LDA #$2A
 LDX #$20
 LDY #$A4
 JSR PRINTA
 JSR LEFTWALL
 LDA #2 
 STA LEV
BD JSR BOXDRAW 
 DEC LEV
 BPL BD  
EXITS LDX RNUM
 LDA $9600,X
 STA TEMP
 BIT TEMP
 BPL CHL
 JSR UPSTR ;DRAW TOP STAIR
CHL BIT TEMP
 BVC ROLL    
 JSR BOTSTR
ROLL LDA #0
 STA LEV
 LSR TEMP ;URD
 BCC NX1
 JSR RTDOP
NX1 INC LEV ;LEV=1
 LSR TEMP
 BCC NX2
 JSR RTDOP
NX2 INC LEV ;LEV=2
 LSR TEMP 
 BCC NX3
 JSR RTDOP
NX3 LSR TEMP
 BCC NX4
 JSR LFDOP
NX4 DEC LEV
 LSR TEMP
 BCC NX5
 JSR LFDOP
NX5 DEC LEV ;LEV=0
 LSR TEMP
 BCC INST    
 JSR LFDOP
*
INST JSR INNERSTR 
*
EXPLRES LDA #2
 STA LEV
LOOP4 LDA #7
 STA REG
LOOP3 LDX LEV
 LDA PTAB,X
 STA LOOK+1
 LDX RNUM
LOOK LDA $9500,X
 STA TEMP
ROLL2 LSR TEMP
 BCC NXREG 
 JSR PRBLNK
NXREG DEC REG
 BPL ROLL2
 DEC LEV
 BPL LOOP4
 BIT CAPTUREFLG
 BPL DRAWOPS 
 JSR CHECKCAP
DRAWOPS JSR OPINIT
RDOUT RTS
*
*
***************************
*
INNERSTR DFB $EA,$EA,$EA ;FUTURE JMP IF NEEDED 
LOADONE LDA #1
 STA LEV
 LDX RNUM 
 LDA $9200,X ;IF $FF THEN JMP TO SPEC.ROOM DRAW
 CMP #$FF
 BNE INST1 ;DO SPEC. AND RETURN WITH
 JMP SPCHK
INST1 STA TEMP ;STAIR CODE IN TEMP
 LDA $9280,X
INST2 STA TEMP3 
 LDA $9640,X
 STA TEMP2
 JSR ROLREG
 LDA #2
 STA LEV
 LDX RNUM
 LDA $9240,X
 STA TEMP
 LDA $92C0,X
 STA TEMP3
 LDA $9680,X
 STA TEMP2
 JSR ROLREG
INRSOUT RTS 
*
*
ROLREG LDA #7 
 STA REG
 LDA #$80
 STA SKFLG
GETXR JSR FIGXR
 LSR TEMP
 BCC CHLF  
 LSR SKFLG
 JSR DRTSTR
CHLF LSR TEMP3
 BCC FLCHK  
 LSR SKFLG
 JSR DLSTR
FLCHK LSR TEMP2
 BCC NEXREG  
 LSR SKFLG
 JSR NOFLOOR
NEXREG BIT SKFLG 
 BPL NOSK
 CLC
 LDA RNUM
 ADC REG
 ADC LEV
 AND #7
 CMP #3
 BEQ DSK
 CMP #4
 BEQ DSK
 CMP #6
 BNE NOSK
 LDA LEV
 CMP #2
 BEQ SW
 JSR WEAKFLOOR
SW JMP NOSK 
DSK JSR DRSK
NOSK LDA #$80
 STA SKFLG
 DEC REG     
 BPL GETXR
 RTS
*
*
*
***************************
*
* LOOK IN BOX
*
****************************
*
LKBX1 LDX LEV
 LDA PTAB,X
 STA LB+1
 STA STB+1
 STA PB+1
 STA PIFIX+1
 STA DGB+1
 LDX RNUM   
LB LDA $9300,X
 STA TEMP
PB LDA $9400,X
 STA TEMP3
 BEQ BITBOX ;NO PILE
 AND #7
 CMP REGH
 BNE BITBOX ;NO PILE CLOSE BY
 LDA OLDKEY
 CMP #'O'
 BNE ND1
 JMP DIGIT
ND1 CMP #'T'
 BNE BITBOX
 JMP DIGIT    
BITBOX BIT TEMP 
 BPL NOBX
 LDA TEMP
 AND #7
 STA REG
 CMP REGH
 BNE NOBX
 LDA OLDKEY
 CMP #'L'
 BEQ LOOKIN
 CMP #'O'
 BEQ OPENIT
 CMP #'T'
 BEQ TAKCONT
 RTS
NOBX JMP NOBXMSG  
*
ITSCLOSED LDA #$A 
 JMP MSG 
*
LOOKIN BIT TEMP
 BVC ITSCLOSED
 JSR CONTFIX 
 JMP MSG  
*
OPENIT BIT TEMP
 BVC OPENUP
OPMSG LDA #$B 
 JMP MSG 
OPENUP LDA TEMP
 ORA #$40
 LDX RNUM
STB STA $9300,X
 JSR BOXOPEN
 JMP OPMSG
*
*
*
*
TAKCONT LDA CONT 
 CMP #2
 BNE NXTK1
 LDA STAT2 
 ORA #$80
 STA STAT2
 JMP TAKOUT
NXTK1 CMP #3 
 BNE NXTK2
 LDA #7
 STA STICKCOUNT 
 JMP TAKOUT 
NXTK2 CMP #4
 BNE NXTK3
 LDA #7    
 STA BULLETCOUNT 
 JMP TAKOUT
NXTK3 CMP #6 
 BNE NXTK4
 LDA #$40
 ORA STAT2
 STA STAT2
 JMP TAKOUT
NXTK4 CMP #5
 BNE NXTK5
 BIT TEMP ;BOX OR PILE?
 BMI TAKOUT ;BR IF BOX
 INC LIVES
 LDA LIVES
 AND #7
 STA LIVES
 JMP TAKOUT
NXTK5 CMP #7
 BNE TAKOUT
 BIT TEMP ;BOX OR PILE
 BMI ABOX
BOOBYTRAP LDA XH 
 STA XCH
 LDA #3
 STA YCH
 LDA #$F
 JSR MSG
 INC STICKCOUNT
 JSR LETFALL
 JMP TAKOUT
ABOX LDA #$80 
 ORA STAT1
 STA STAT1
 LDA LEV
 BEQ TAKOUT
 JSR RANDOM 
 LDA ARRAY
 AND #7
 CMP #4
 BCC BOOBYTRAP
TAKOUT LDA #'+' 
 STA OLDKEY
 RTS       
*
*
*
NOBXMSG LDA #$C 
 JMP MSG 
*
*
 ORG $5D00
*
*
*
MSG STA STRTEMP
 JSR ERASMSG
 LDA STRTEMP
 STA STRNUM    
 LDA #1
 STA XTAB
 LDA #22
 STA YTAB
 JSR STRPRNT
 LDA #'+'
 STA OLDKEY
 RTS
*
*
*
*
INV1 JSR ERASMSG
 LDA #23
 STA YTAB
 LDA #1
 STA XTAB
 LDA LIVES
 CLC
 ADC #$10
 JSR MSG1
 LDA #3
 STA XTAB
 LDA #9
 JSR MSG1
 BIT STAT1
 BPL CHSTICK
 LDA #12
 STA XTAB
 LDA #7
 JSR MSG1
CHSTICK DEC YTAB
 LDA #1
 STA XTAB
 LDA STICKCOUNT
 CLC
 ADC #$10
 JSR MSG1
 LDA #3
 STA XTAB
 LDA #8
 JSR MSG1
 BIT STAT2
 BVC CHBULL
 LDA #12
 STA XTAB
 LDA #6
 JSR MSG1
CHBULL DEC YTAB
 LDA #1
 STA XTAB
 LDA BULLETCOUNT
 CLC
 ADC #$10
 JSR MSG1
 LDA #3
 STA XTAB
 LDA #4
 JSR MSG1
 BIT STAT2
 BPL OUTINVP
 LDA #12
 STA XTAB
 LDA #2
 JSR MSG1
OUTINVP RTS
*
*
*
MSG1 STA STRNUM 
 JSR STRPRNT
 LDA #'+'
 STA OLDKEY
 RTS
*
*
BEEP RTS ;RING A BELL HERE LATER
*
*
ERASMSG LDA #23 
 STA YTAB
 LDA #1
 STA XTAB
 LDA #3 
 STA TEMP
PRE LDA #$21 
 JSR MSG1
 DEC YTAB
 DEC TEMP
 BNE PRE
 RTS
*
DIGIT LDA TEMP3
 STA TEMP
 AND #$C0 
 BEQ CHTP   
 JSR INDFIX 
CHKEY LDA OLDKEY 
 CMP #'O'
 BEQ FIXINDEX
 RTS
*
CHTP LDA OLDKEY
 CMP #'T'
 BEQ TAKPL
 RTS
FIXINDEX JSR SKPL1 
 LDA #'+'
 STA OLDKEY
 DEC INDEX
 BNE NOACT 
 JSR ACTIVATE 
NOACT CLC 
 LDA INDEX
 ROR A
 ROR A
 ROR A
 STA INDEX
 LDA TEMP3
 AND #$3F 
 ORA INDEX
 LDX RNUM
DGB STA $9400,X
 RTS
TAKPL JSR CONTFIX
 LDA TEMP3
 AND #7   
 STA REG
 JSR FIGXR
 LDX CONT
 LDA CONTAB,X 
 LDX LEV
 LDY CONY,X
 LDX XR
 JSR PRINTA
 LDA #0
 LDX RNUM
PIFIX STA $9400,X
 JMP TAKCONT 
*
INDFIX LDA TEMP3
 LSR A
 LSR A
 LSR A
 LSR A
 LSR A
 LSR A
 STA INDEX
 RTS
*
CONTFIX LDA TEMP
 LSR A
 LSR A
 LSR A
 AND #7
 CMP #7
 BNE STCON ;NOT THE IDOL
 LDA ROW
 LDX DIFFL
 CMP IDFL,X 
 BCS MAYBE
NOIDOL LDA #0
 BEQ STCON
MAYBE BIT STAT1
 BMI NOIDOL ;ALREADY GOT IT?
 LDA #7 ;GOT THE IDOL
STCON STA CONT
 RTS
*
*
SKPL1 LDA TEMP3
 AND #7
 STA REG
 JSR FIGXR
SKPL2 CLC    
 LDA INDEX
 ADC SKBAS
 STA SKNUM
 JSR SKDR1
 RTS
*
 NOP
 NOP
*
OPINIT LDA XH
 BEQ ADJLEFT
 CMP #$20
 BCS ADJRIGHT
 JMP OPI
ADJLEFT JSR RMADJLF 
 JMP OPI
ADJRIGHT JSR RMADJRT
OPI LDX #$F
LOADT LDA OPMODE0,X 
 BPL NEXTXX 
 JSR GETCENTER
 LDA XNEW,X
 CMP #40
 BCS NEXTX  
 CLC
 ADC WIDTH
 TAY
 LDA OPLEV,X
 BEQ CHECKZERO
 CMP #1
 BEQ CHECKONE
CHECKTWO LDA #0  
R STA LU+1
 JSR LU
 JMP NEXTX
CHECKONE LDA #2
 BNE R
CHECKZERO LDA #4
 BNE R
NEXTX JSR FIRSTDRAW
NEXTXX DEX 
 BPL LOADT
 BIT SAFLG 
 BPL OPINITOUT 
 LDA #$30 
 STA SAFLG  
OPINITOUT RTS 
*
GETCENTER LDA OPWIDTH,X
 LSR A
 STA WIDTH
 RTS 
*
*
*
LU LDA ($0),Y
 BNE LUOUT
 INC XNEW,X
 INY
 CPY #41
 BNE LU
 INC XNEW,X
LUOUT RTS
*
*
*
*
 ORG $5F40
*
******************************
*
*   STRING PRINTER
*
******************************
*
XPOS EQU $FA
YTOP EQU $FB
YBOT EQU $FC
CHNUM EQU $8E9
STRTAB EQU $1E00
* CHANGE WHEN RELOCATE
* 
*
*
*  ASSUMES SHORT SET OF BKGND CHAR
*
PRINSTR LDA STRNUM
 CMP #$25
 BCC ASLA
 LDA #$10
ASLA ASL A ;MULT BY 2
 TAX
 LDA STRTAB,X
 STA ADDR+1
 INX
 LDA STRTAB,X
 STA ADDR+2
INITIAL LDA #1
 STA WIDTH
 LDA XTAB
 STA XPOS
 LDA YTAB
 ASL A
 ASL A
 ASL A
 STA YTOP
 CLC
 ADC #8
 STA YBOT
 LDA #$9D
 STA $A25 ;REMOVE EOR PRINT
ADDR LDA $5300 ;CHANGEABLE
 CMP #38  
 BEQ THROUGH
 STA CHNUM
 ASL A
 ASL A
 ASL A
 STA $A1B
 BCC NOHI
 LDA #$98 ;CHANGE IF RELOCATED  
STHI STA $A1C ;TABLER+2 IN PLOT
 BNE N1
NOHI LDA #$97 ;CHANGE IF RELOCATED 
 BNE STHI
N1 JSR $A00 ;PRINT IT
 INC ADDR+1
 BNE NEXT 
 INC ADDR+2
NEXT INC XPOS
 BNE ADDR
THROUGH LDA #$5D 
 STA $A25 ;RESTORE EOR PRINT
 RTS
*
**************************
* AFTER SPECIAL DRAW YOU
* CAN RESUME NORMAL ROOM DRAW
* IF YOU RETURN TO INST2
* WITH STAIR CODES IN TEMP
* AND TEMP3
***************************
*
SPCHK LDX RNUM
 LDA $9280,X
 CMP #1   
 BNE NXSPC1 
 JMP SPECIAL1 
NXSPC1 CMP #2
 BNE NXSPC2
 JMP SPECIAL2
NXSPC2 CMP #3
 BNE NXSPC3
 JMP SPECIAL3
NXSPC3 CMP #4
 BNE WEIRD
 JMP SPECIAL4
WEIRD LDA #0
 STA TEMP
FINSPEC JMP INST1  
*
*
**************************
*
 ORG $93C0 
*
PTAB DFB 0,$40,$80
JMPTAB DFB $49,$2E,$49,$2E,$31,$46,$28,$49,$31,$49,$46,$49,$31,$49,$4F,$49,$49,$49 
*
CONY DFB $28,$60,$98
*
CONTAB DFB $7D,$51,$2F,$4B,$35,$3A,$63,$6F 
*
*
*
******************************
*
 ORG $1C00
*
*****************************
*
*
BOXDRAW LDX LEV
 LDA PTAB,X
 STA CHB+1
 LDX RNUM
CHB LDA $9300,X  
 STA TEMP
 BIT TEMP
 BPL OUTBX
 AND #7
 STA REG
 JSR FIGXR
 BIT TEMP
 BVC BXCL
BXOP JSR DRBXOP
 JMP OUTBX
BXCL JSR DRBXCL
OUTBX NOP 
*
*
PILEDRAW LDX LEV
 LDA PTAB,X
 STA CHP+1
 LDX RNUM
CHP LDA $9400,X
 STA TEMP
 STA TEMP3
 BEQ OUTPL
 AND #7
 STA REG
 JSR FIGXR
 JSR CONTFIX 
 JSR INDFIX 
 LDX LEV
 LDY CONY,X 
NOCHAN LDX CONT 
 BEQ LIND  
 LDA CONTAB,X
 LDX XR
 JSR PRINTA
LIND LDA INDEX 
 BEQ OUTPL
L JSR SKPL2 
 DEC INDEX
 BNE L
OUTPL RTS
*
*
*
***************************
*
PRBLNK JSR FIGXR
 LDX LEV
PRB1 LDA BY,X ;BOX Y 
 STA YTEMP
 LDA XR
 STA XTEMP
 LDA REG
 BNE MV7
 DEC XTEMP
 JMP LOAD5
MV7 CMP #7
 BNE LOAD5
 INC XTEMP
LOAD5 LDA #5
 STA COUNT2 
PRW JSR STAIRWELL
 LDA YTEMP
 CLC
 ADC #8
 STA YTEMP
 DEC COUNT2
 BPL PRW
 RTS
*
***************************
*
*
BOXOPEN JSR FIGXR
 JSR DRBXCL
 JMP DRBXOP
*
*
ACTIVATE JSR RANDOM
 LDA ARRAY
 AND #$F
 CMP #4 
 BCS ACTIVOUT
 LDA TEMP3
 AND #7
 STA REG
 JSR FIGXR
 LDA XR
 STA XCH
 LDX LEV
 LDA CONY,X
 STA YCH
 INC STICKCOUNT
 LDA #$F
 JSR MSG
 JSR LETFALL
ACTIVOUT RTS
*
*
CHECKCAP BVS LOADCOL
 LDA #$40
 ORA CAPTUREFLG
 STA CAPTUREFLG
 LDA #8
 STA YH
 LDX $6
 LDA #0
 STA OPLEV,X
 BIT ACT1
 BPL RM0 
RM4 LDA #4
 STA COL 
 JMP LOADCOL
RM0 LDA #0
 STA COL 
LOADCOL LDA COL
 CMP #2
 BEQ CHCAPOUT
 LDA #0
 STA LEV
 JSR RTDOP
 JSR LFDOP
 LDY #$30
 JSR DRAWFLOOR
CHCAPOUT RTS
*
*
